# coding=utf-8
# Copyright 2024 The Google Research Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Base class for optimizers.

This is a simplified interface modeled off of Tensorflow's v1 optimizers.
"""

from typing import List
import tensorflow.compat.v1 as tf


class BaseOptimizer(object):
  """Base class for optimizers.

  This is loosly modeled off of TensorFlow's optimizers but greatly simplified.
  """

  def minimize(self, loss, global_step,
               var_list):
    """Minimize the given loss with respect to the given variables.

    This method is also responsible for increasing the global_step.

    Args:
      loss: Loss to minimize
      global_step: Current iteration of inner training. This is needed by some
        optimizers.
      var_list: List of variables to modify

    Returns:
      train_op: Training operation. One run trains a single step.
    """
    raise NotImplementedError()
